#!/usr/bin/env python3
"""
qt5-qttools MCP Server

面向 qt5-qttools 软件包中的 qtattributionsscanner-qt5 命令行工具。

MCP tools 列表：
1. qtattributionsscanner_help - 显示帮助信息
   参数：无
   返回：命令执行结果

2. qtattributionsscanner_version - 显示版本信息  
   参数：无
   返回：命令执行结果

3. qtattributionsscanner_scan_json - 以 JSON 格式扫描输出
   参数：scan_dir (str): 要扫描的目录路径
   返回：命令执行结果

4. qtattributionsscanner_scan_filter - 使用过滤器扫描特定模块
   参数：scan_dir (str): 要扫描的目录路径, filter_value (str): 过滤器值
   返回：命令执行结果

5. qtattributionsscanner_scan_basedir - 指定基础目录进行扫描
   参数：scan_dir (str): 要扫描的目录路径, base_dir (str): 基础目录路径
   返回：命令执行结果

6. qtattributionsscanner_scan_verbose - 详细模式扫描
   参数：scan_dir (str): 要扫描的目录路径
   返回：命令执行结果

7. qtattributionsscanner_scan_silent - 静默模式扫描
   参数：scan_dir (str): 要扫描的目录路径
   返回：命令执行结果

所有工具返回统一的 JSON 结构：
{
  "success": bool,      # 命令是否成功执行
  "command": str,       # 实际执行的命令
  "exit_code": int,     # 命令退出码
  "stdout": str,        # 标准输出
  "stderr": str         # 标准错误输出
}
"""

import subprocess
import json
from typing import List
from mcp.server.fastmcp import FastMCP, Context

mcp = FastMCP("Qt5-Qttools MCP Server")

@mcp.tool()
def qtattributionsscanner_help() -> dict:
    """显示 qtattributionsscanner-qt5 命令的帮助信息
    
    返回:
        dict: 包含命令执行结果的统一 JSON 结构
    """
    command = ["qtattributionsscanner-qt5", "-h"]
    result = subprocess.run(command, capture_output=True, text=True)
    
    return {
        "success": result.returncode == 0,
        "command": " ".join(command),
        "exit_code": result.returncode,
        "stdout": result.stdout,
        "stderr": result.stderr
    }

@mcp.tool()
def qtattributionsscanner_version() -> dict:
    """显示 qtattributionsscanner-qt5 命令的版本信息
    
    返回:
        dict: 包含命令执行结果的统一 JSON 结构
    """
    command = ["qtattributionsscanner-qt5", "-v"]
    result = subprocess.run(command, capture_output=True, text=True)
    
    return {
        "success": result.returncode == 0,
        "command": " ".join(command),
        "exit_code": result.returncode,
        "stdout": result.stdout,
        "stderr": result.stderr
    }

@mcp.tool()
def qtattributionsscanner_scan_json(scan_dir: str) -> dict:
    """以 JSON 格式扫描指定目录并输出结果
    
    参数:
        scan_dir (str): 要扫描的目录路径
        
    返回:
        dict: 包含命令执行结果的统一 JSON 结构
    """
    command = ["qtattributionsscanner-qt5", "--verbose", "--output-format", "json", "-o", "outputfile.json", scan_dir]
    result = subprocess.run(command, capture_output=True, text=True)
    
    return {
        "success": result.returncode == 0,
        "command": " ".join(command),
        "exit_code": result.returncode,
        "stdout": result.stdout,
        "stderr": result.stderr
    }

@mcp.tool()
def qtattributionsscanner_scan_filter(scan_dir: str, filter_value: str) -> dict:
    """使用过滤器扫描指定目录中的特定模块
    
    参数:
        scan_dir (str): 要扫描的目录路径
        filter_value (str): 过滤器值，如 "QDocModule=qtcore"
        
    返回:
        dict: 包含命令执行结果的统一 JSON 结构
    """
    command = ["qtattributionsscanner-qt5", "--filter", filter_value, "-o", "outputfile.json", scan_dir]
    result = subprocess.run(command, capture_output=True, text=True)
    
    return {
        "success": result.returncode == 0,
        "command": " ".join(command),
        "exit_code": result.returncode,
        "stdout": result.stdout,
        "stderr": result.stderr
    }

@mcp.tool()
def qtattributionsscanner_scan_basedir(scan_dir: str, base_dir: str) -> dict:
    """指定基础目录进行扫描
    
    参数:
        scan_dir (str): 要扫描的目录路径
        base_dir (str): 基础目录路径
        
    返回:
        dict: 包含命令执行结果的统一 JSON 结构
    """
    command = ["qtattributionsscanner-qt5", "--verbose", "--basedir", base_dir, "-o", "outputfile.json", scan_dir]
    result = subprocess.run(command, capture_output=True, text=True)
    
    return {
        "success": result.returncode == 0,
        "command": " ".join(command),
        "exit_code": result.returncode,
        "stdout": result.stdout,
        "stderr": result.stderr
    }

@mcp.tool()
def qtattributionsscanner_scan_verbose(scan_dir: str) -> dict:
    """以详细模式扫描指定目录
    
    参数:
        scan_dir (str): 要扫描的目录路径
        
    返回:
        dict: 包含命令执行结果的统一 JSON 结构
    """
    command = ["qtattributionsscanner-qt5", "--verbose", "-o", "outputfile.json", scan_dir]
    result = subprocess.run(command, capture_output=True, text=True)
    
    return {
        "success": result.returncode == 0,
        "command": " ".join(command),
        "exit_code": result.returncode,
        "stdout": result.stdout,
        "stderr": result.stderr
    }

@mcp.tool()
def qtattributionsscanner_scan_silent(scan_dir: str) -> dict:
    """以静默模式扫描指定目录
    
    参数:
        scan_dir (str): 要扫描的目录路径
        
    返回:
        dict: 包含命令执行结果的统一 JSON 结构
    """
    command = ["qtattributionsscanner-qt5", "-s", "-o", "outputfile.json", scan_dir]
    result = subprocess.run(command, capture_output=True, text=True)
    
    return {
        "success": result.returncode == 0,
        "command": " ".join(command),
        "exit_code": result.returncode,
        "stdout": result.stdout,
        "stderr": result.stderr
    }

if __name__ == "__main__":
    mcp.run()